#include <Arduino.h>
#include <SPI.h>
#include <LoRa.h>
#include <DHT.h>
#include <BH1750.h>
#include "ai_analyzer.h"

// 定义引脚
#define DHTPIN 2
#define DHTTYPE DHT22
#define LORA_SS 10
#define LORA_RST 9
#define LORA_DIO0 3

// 初始化传感器
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;

// 初始化AI分析器
AIAnalyzer aiAnalyzer;

// 节点ID
const uint8_t nodeId = 1;

void setup() {
  // 初始化串口通信
  Serial.begin(9600);
  
  // 初始化DHT传感器
  dht.begin();
  
  // 初始化光照传感器
  Wire.begin();
  lightMeter.begin();
  
  // 初始化LoRa模块
  LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
  if (!LoRa.begin(433E6)) {
    Serial.println("LoRa初始化失败！");
    while (1);
  }
  
  // 初始化AI分析器
  aiAnalyzer.init();
  
  // 低功耗设置
  setupLowPower();
}

void loop() {
  // 读取传感器数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  float light = lightMeter.readLightLevel();
  
  // 检查传感器数据是否有效
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println("读取DHT传感器数据失败！");
  } else {
    // 使用AI分析器检测异常
    SensorData data = {nodeId, temperature, humidity, light};
    int anomaly = aiAnalyzer.detectAnomaly(data);
    
    // 发送数据和异常标记
    sendSensorData(data, anomaly);
  }
  
  // 进入睡眠模式节省电量
  sleepMode();
  
  // 每10分钟唤醒一次
  delay(600000);
}

void sendSensorData(SensorData data, int anomaly) {
  // 准备发送的数据
  LoRa.beginPacket();
  LoRa.write((uint8_t*)&data, sizeof(SensorData));
  LoRa.write(anomaly);
  LoRa.endPacket();
  
  // 打印发送信息
  Serial.print("发送数据: ");
  Serial.print("ID=");
  Serial.print(data.nodeId);
  Serial.print(", T=");
  Serial.print(data.temperature);
  Serial.print(", H=");
  Serial.print(data.humidity);
  Serial.print(", L=");
  Serial.print(data.light);
  Serial.print(", 异常=");
  Serial.println(anomaly);
}

void setupLowPower() {
  // 配置低功耗模式
  // 实际实现根据硬件平台而定
}

void sleepMode() {
  // 进入睡眠模式
  // 实际实现根据硬件平台而定
}